package com.aaa.service.sas.impl;

import cn.hutool.core.util.ObjectUtil;
import com.aaa.aspect.InsertAnn;
import com.aaa.aspect.UpdateAnn;
import com.aaa.entity.PageSortEntity;
import com.aaa.entity.sas.TestPlanSas;
import com.aaa.dao.sas.TestPlanSasDao;
import com.aaa.service.sas.TestPlanSasService;
import com.aaa.utils.MyTools;
import com.github.pagehelper.PageHelper;
import lombok.extern.java.Log;
import org.springframework.stereotype.Service;


import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 测试计划fpa(TestPlanSas)表服务实现类
 *
 * @author makejava
 * @since 2022-08-31 09:27:23
 */
@Service("testPlanSasService")
@Log
public class TestPlanSasServiceImpl implements TestPlanSasService {
    @Resource
    private TestPlanSasDao testPlanSasDao;

    /**
     * 查询
     *
     * @param pageSortEntity
     * @param testPlanSas
     * @return
     */
    @Override
    public List<TestPlanSas> queryAllSasPlan(PageSortEntity pageSortEntity, TestPlanSas testPlanSas) {
        PageHelper.startPage(pageSortEntity.getPage(), pageSortEntity.getLimit(), pageSortEntity.getOrderString());
        return testPlanSasDao.queryAllSasPlan(testPlanSas);
    }

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public TestPlanSas queryById(Integer id) {
        return this.testPlanSasDao.queryById(id);
    }


    /**
     * 新增数据
     *
     * @param testPlanSas 实例对象
     * @return 实例对象
     */
    @Override
    @InsertAnn
    public TestPlanSas insert(TestPlanSas testPlanSas) {
        while (true) {
            TestPlanSas testPlanSas1 = new TestPlanSas();
            //此处，生成不重复的随机数，不足6为的前补零
            String sixRandom = MyTools.getSixRandom();
            testPlanSas1.setTestCode(sixRandom);
            //判断是否跟数据库已经存在的邀请码重复
            List<TestPlanSas> testPlanFpaList = testPlanSasDao.queryByAllView(testPlanSas1);
            if (ObjectUtil.isEmpty(testPlanFpaList) || testPlanFpaList.size() == 0) {
                //退出循环之前，将合法的随机数保存到实体对象中testPlanFpa
                testPlanSas.setTestCode(sixRandom);
                break;
            }
        }
        this.testPlanSasDao.insert(testPlanSas);
        return testPlanSas;
    }

    /**
     * 修改数据
     *
     * @param testPlanSas 实例对象
     * @return 实例对象
     */
    @Override
    @UpdateAnn
    public boolean update(TestPlanSas testPlanSas) {
        int update = this.testPlanSasDao.update(testPlanSas);
        if (update > 0) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return this.testPlanSasDao.deleteById(id) > 0;
    }

    /**
     * 删除
     *
     * @param id
     * @return
     */
    @Override
    public int delete(int[] id) {
        List<Object> arrayList = new ArrayList<>();
        for (int i : id) {
            arrayList.add(i);
        }
        int delete = testPlanSasDao.delete(arrayList);
        return delete;
    }

    /**
     * 唯一性校验
     *
     * @param testPlanFpa
     * @return
     */
    @Override
    public boolean repetitionName(TestPlanSas testPlanFpa) {
        Integer integer = testPlanSasDao.repetitionName(testPlanFpa);
        if (integer > 0) {
            return false;
        }
        return true;
    }
}
